package cn.edu.jxust.core.domain.repository.impl;

import cn.edu.jxust.common.domain.entity.Role;
import cn.edu.jxust.common.domain.dto.RoleVo;
import cn.edu.jxust.core.infrastructure.mapper.RoleMapper;
import cn.edu.jxust.common.response.Result;
import cn.edu.jxust.common.response.ResultUtils;
import cn.edu.jxust.common.response.enums.ResultStatus;
import cn.edu.jxust.core.domain.repository.RoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * @author QiuKangming
 * @since 2020-06-29
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {

    @Resource
    private RoleMapper roleMapper;

    /**
     * 修改角色信息
     * @param roleVo 角色视图对象
     * @return boolean
     */
    @Override
    public Result modifyRoleInfo(RoleVo roleVo) {

        //将 VO 对象转换成实体类
        Role role = Role.builder()
                .id(roleVo.getId())
                .roleDescription(roleVo.getRoleDescription())
                .editor(roleVo.getEditor())
                .build();
        boolean b = roleMapper.updateById(role) == 1;
        if(b){
            return  ResultUtils.resultWithoutData(ResultStatus.SUCCESS, "修改角色信息成功");
        }else{
            return ResultUtils.resultWithoutData(ResultStatus.FAILED, "修改角色信息失败, 请重试!");
        }

    }
    /**
     * 获取当前角色可操作的角色 id, 超级管理员全部返回
     * @param roleId 角色id号
     * @return List<Role>
     */
    @Override
    public List<Role> getRoles(Integer roleId) {

        List<Role> roles = roleMapper.selectList(null);

        //超级管理员返回全部
        switch (roleId) {
            case 1:
                return roles;
            case 2:
                return roles.subList(2, 4);
            case 3:
                return roles.subList(3, 4);
        }
        return null;

    }

    /**
     * 获取当前角色可操作的角色 id, 超级管理员全部返回, 其他逐级返回
     * @param roleId 角色id号
     * @return List<Integer>
     */
    @Override
    public List<Integer> getRoleIds(Integer roleId) {

        List<Integer> roleList = null;
        switch (roleId){
            //超级管理员
            case 1:
                roleList = Arrays.asList(0, 1, 2, 3, 4);
                break;
            //局级管理员
            case 2:
                roleList = Arrays.asList(0, 3, 4);
                break;
            //区级管理员
            case 3:
                roleList = Arrays.asList(0, 4);
                break;
        }
        return roleList;

    }

    /**
     * 根据角色id获取角色对象
     * @param roleId 角色id号
     * @return Role
     */
    @Override
    public Role getRole(Integer roleId) {

        if(roleId.equals(0)){
            //未分配角色的账户
            Role _role = new Role();
            _role.setId(0);
            _role.setRoleName("未分配角色");
            return _role;
        }

        return roleMapper.selectById(roleId);

    }

    /**
     * 通过角色id获取角色名称
     * @param roleId 角色id号
     * @return String
     */
    @Override
    public String getRoleNameById(Integer roleId) {

        return roleMapper.getRoleNameById(roleId);

    }

}
